home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
AmigActive 26
/
AACD 26.iso
/
AACD
/
Programming
/
AllPlaton
/
MegaTron
/
MegaTronV142.AMOS
/
MegaTronV142.amosSourceCode
< prev
next >
Encoding:
Amiga
Atari
Commodore
DOS
FM Towns/JPY
Macintosh
Macintosh JP
Macintosh to JP
NeXTSTEP
RISC OS/Acorn
Shift JIS
UTF-8
Wrap
AMOS Source Code
|
1996-03-30
|
48.9 KB
|
1,862 lines
' *************************************
' * *
' * Mega Tron V1.5 *
' * Written by Chris Hodges *
' * *
' *************************************
'
Set Buffer 20
If Extension_8_09B4
C$=Upper$(Command Line$)
Else
C$=Upper$( Extension_8_09D6( Extension_8_09C2 ))
End If
'C$='MUSIC="ST-00:Modules/mod.zif" LOAD'
Global MXPL,MXEX,MXRO,CH,SO,FC,MUON,SOON,NTS,LOWLEVEL,PLAY4DIS
OLDSYS=Peek(Leek(4)+530)
MXPL=10 : MXEX=10 : MXRO=10
MUON=1 : SOON=1 : TITLE=1 : LOAOPTS=0 : WB=1
LOWDIS=0 : PLAY4DIS=0
M$="MegaTron.mus"
Gosub PARSECOMMANDLINE
NTS=-Ntsc*14
Dim CONF(8),KEYS(6,6),DEV$(8),CO$(12),WEAP$(12),WP(12),EXTKEYS$(37),PRE$(7)
Dim PL(MXPL-1,15),EX(MXEX-1,3),RO(MXRO-1,8)
Global CONF(),DEV$(),CO$(),WEAP$(),WP(),PL(),EX(),RO()
Hide On
Gosub LEADATA
Gosub INFOSCREEN
If TITLE
TITLE
Else
If MUON
Extension_8_10F2 125 : Extension_8_108E 3
End If
End If
INIT
Do
MENU
Exit If Param=0
SO=CONF(1)
RAWRESET
GAMEON
Loop
If CONF(0) and MUON Then Extension_8_10A8
If OLDSYS=50 Then Extension_8_037A Else Extension_8_036C
End
PARSECOMMANDLINE:
If Instr(C$,"CLOSEWORKBENCH") Then Close Workbench : Extension_8_05D6 : WB=0
If Instr(C$,"60HZ") Then Extension_8_036C
If Instr(C$,"50HZ") Then Extension_8_037A
If Instr(C$,"NOMUSIC") Then MUON=0
If Instr(C$,"NOSOUND") Then SOON=0
If Instr(C$,"SKIPTITLE") Then TITLE=0
If Instr(C$,"LOAD") Then LOAOPTS=1
If Instr(C$,"DISABLELOWLEVEL") Then LOWDIS=1
If Instr(C$,"DISABLE4PLAYER") Then PLAY4DIS=1
P=Instr(C$,"PLAYERS=")
If P Then MXPL=Max(Min(Val(Mid$(C$,P+8)),10),2)
P=Instr(C$,"EXPLOSIONS=")
If P Then MXEX=Max(Min(Val(Mid$(C$,P+11)),30),2)
P=Instr(C$,"ROCKETS=")
If P Then MXRO=Max(Min(Val(Mid$(C$,P+8)),30),2)
P=Instr(C$,"MUSIC=")
If P
M$="" : Add P,6 : BR=0
Do
Exit If P>Len(C$)
A$=Mid$(C$,P,1)
If A$='"' : BR=1-BR : A$="" : End If
Exit If(A$<=" ") and BR=0
M$=M$+A$
Inc P
Loop
End If
Return
LEADATA:
SO=SOON : MU=MUON
Trap Extension_8_0956
If Errtrap
ER$="Audio channels already reserved!"
ERS$=ER$
MUON=0 : SOON=0 : Erase 3
Return
End If
If MUON
Trap Extension_8_0456 M$,-3
If Errtrap
MUON=0
ER$= Extension_8_0522( Extension_8_0532 )
Else
If Peek$(Start(3)+1080,4)<>"M.K."
MUON=0 : Erase 3
ER$="Not a trackermusic!"
Else
ER$='Loaded "'+ Extension_8_02F0(M$)+'" length:'+Str$(Length(3))
End If
End If
Else
ER$="Music disabled"
End If
If SOON
Trap Load "MegaTron.sam",5
If Errtrap
ERS$= Extension_8_0522( Extension_8_0532 )
SOON=0
Else
Extension_8_142A 5
ERS$="Loaded"
Extension_8_008A 5
End If
Else
ERS$="Sound disabled"
End If
Return
INFOSCREEN:
Screen Open 0,640,200,2,$8000
Curs Off : Flash Off : Paper 0 : Pen 1 : Cls
Palette 0,0
Centre "Welcome to Megatron" : Print : Print : Print
Print "Megatron Version: V1.5 30-Mar-96"
Print "Free chip memory:";Chip Free/1024;" KB"
Print "Free fast memory:";Fast Free/1024;" KB"
Print "Processor :"; Extension_8_060E
Print "Coprocessor :";
If Extension_8_0618 =0
Print " none mounted"
Else
Print Str$( Extension_8_0618 )
End If
Print "Display system : ";
If Ntsc
Print "NTSC"
Else
Print "PAL"
End If
Print "Lowlevel library: ";
If LOWDIS=0
If Exist("LIBS:lowlevel.library")
Print "found -> joypad support enabled"
LOWLEVEL=1
Else
Print "not found! :-("
LOWLEVEL=0
End If
Else
Print "disabled"
LOWLEVEL=0
End If
Print "4 player adapter: ";
If PLAY4DIS
Print "disabled"
Else
Print "enabled"
End If
Print "Programm called : ";
If Extension_8_09B4
Print "from CLI ["+Mid$(Str$( Extension_8_09B4 ),2)+"]"
Else
Print "from Workbench"
End If
Print "Workbench : ";
If WB Then Print "Open" Else Print "Probably closed"
Print "Music : ";ER$
Print "Sound : ";ERS$
Print "Title : ";
If TITLE Then Print "Coming soon" Else Print "Skipped"
Print "Load settings : ";
If LOAOPTS Then Print "Yes" Else Print "No"
Print "Maximum Players :";Str$(MXPL)
Print "Maximum Explos. :";Str$(MXEX)
Print "Maximum Rockets :";Str$(MXRO)
Print
Print "Enjoy the game!"
Fade 1,0,$FFF
For A=0 To 124
Multi Wait
Exit If Fire(1) or Mouse Key or(Inkey$<>"")
Next
Fade 1 : Wait 16
Screen Close 0
Return
Procedure TITLE
MXDR=49
Dim DR(MXDR,1),ST$(5,5)
Unpack 8 To 0 : Screen Hide
Colour 13,$B00 : Colour 14,$900 : Colour 15,$800
Colour 13+16,$B00 : Colour 14+16,$900 : Colour 15+16,$800
Unpack 10 To 3 : Screen Hide
Get Palette 0 : For A=0 To 15 : Colour A+16,$FFF : Next
Screen 0
For A=0 To 15 : Colour A+16,Colour(A) : Next
Screen Open 2,320,32,2,0 : Screen Hide
Curs Off : Flash Off : Paper 0 : Pen 1 : Cls
LG=Logbase(0)
Screen Open 1,320,256,32,0 : Screen Hide
Curs Off : Flash Off : Paper 0 : Pen 1 : Cls
Screen Display 1,128,40-NTS,320,256+Ntsc*32
Screen Offset 1,0,-32*Ntsc
For A=0 To 31 : Colour A,0 : Next
Screen Copy 0 To 1
Screen 0 : Paste Bob 0,48,1 : Screen 1
Gosub DROPINIT
Double Buffer
Autoback 0
If MUON
Extension_8_10F2 125 : Extension_8_108E 3
End If
Screen Show
Fade 2 To 0
Screen 2
Repeat
Screen Swap 1 : Wait Vbl
C=0
For A=0 To MXDR
If DR(A,1)<40
Inc C
Paste Bob DR(A,0)-7,DR(A,1)-16,2
Add DR(A,1), Extension_8_11B8(1)+1
End If
Next
Extension_8_0882 0,16,48,304,80 To 1,16,48,LG-48*40
Until C=0
Screen 2 : Cls
Restore TEX
For PG=0 To 5
For LI=0 To 5
Read A$
ST$(PG,LI)=A$
Exit If A$=""
Next
Next
Screen 1
PG=0
Do
Screen Copy 0 To Logic(1)
Fill Logbase(4) To Logbase(4)+40*256,0
Gosub PASTMASK
Screen Swap
Gosub WHITIN
Screen Copy Physic(1) To Logic(1)
Gosub PASTTEXT
Screen Swap
Gosub FADIN
For A=0 To 99
Multi Wait
Exit If Fire(1) or Mouse Key or(Inkey$<>""),2
Next
Gosub WHITIN
Screen Swap
Gosub FADIN
Add PG,1,0 To 5
Loop
Gosub WHITIN
Screen Swap
Gosub FADIN
Screen 3 : For A=0 To 15 : Colour A,$FFF : Next
Screen 1
Fade 1 To 3 : Wait 16
Fade 1 : Wait 16
For A=0 To 3 : Screen Close A : Next
Pop Proc
PASTMASK:
Y=104
For LI=0 To 5
Exit If ST$(PG,LI)=""
X=160-Len(ST$(PG,LI))*8
For A=1 To Len(ST$(PG,LI))
C=Asc(Mid$(ST$(PG,LI),A,1))-32
Screen Copy 3,(C mod 20)*16,(C/20)*16,(C mod 20)*16+16,(C/20)*16+16 To Logic(1),X,Y,%1100000
Add X,16
Next
Add Y,24
Next
Return
WHITIN:
Fade 2 To 3
Wait 32
Return
PASTTEXT:
Y=104
For LI=0 To 5
Exit If ST$(PG,LI)=""
X=160-Len(ST$(PG,LI))*8
For A=1 To Len(ST$(PG,LI))
C=Asc(Mid$(ST$(PG,LI),A,1))-29
Paste Bob X,Y,C
Add X,16
Next
Add Y,24
Next
Return
FADIN:
Fade 1 To 0
Wait 16
Return
DROPINIT:
Do
X=16
For A=0 To MXDR
DR(A,0)=X : DR(A,1)=0
Add X, Extension_8_11B8(4)+5
Exit If X>=312,2
Next
Loop
For A=A To MXDR
DR(A,1)=100
Next
Return
TEX:
Data " ","WELCOME TO MEGATRON"," ","WRITTEN BY","CHRIS HODGES",""
Data " ","THIS IS SHAREWARE","ENJOY IT...","AND IF YOU LIKE IT","PLEASE SEND ME","SOME MONEY"
Data "WRITE TO"," ","CHRIS HODGES","KENNEDYSTR. 8","D-82178 PUCHHEIM","WEST GERMANY"
Data " "," ","& THANKS &",""
Data "GREETINGS"," ","MAGIC, VIP, MERLIN,","AMIGAMAN, MARC,","PAUL, ANDY, GREG,","MARTIJN, MARCO,"
Data "GREETINGS"," ","HANS PETER, TOBIAS","RALF, XAVER, TOBI","HENNING, MICHAEL,","MICHI AND MARKUS"
End Proc
Procedure INIT
Shared EXTKEYS$(),KEYS(),PRE$(),PRE,HUM,COM
Restore DEVS
For A=0 To 8
Read DEV$(A)
Next
Restore WEAPONS
For A=0 To 12
Read WEAP$(A)
Next
Restore PRICE
For A=0 To 12
Read WP(A)
Next
Restore FARBEN
For A=1 To 11
Read CO$(A)
Next
Restore KEYS
For A=0 To 6
For K=0 To 6
Read KEYS(A,K)
Next
Next
Restore EXTKEYS
For A=0 To 37
Read EXTKEYS$(A)
Next
Restore PRESETS
For A=0 To 7
Read PRE$(A)
Next
For A=0 To MXPL-1
For AA=0 To 13 : PL(A,AA)=0 : Next
PL(A,6)=8
PL(A,4)=A+2 : PL(A,10)= Extension_8_11B8(9) : PL(A,11)= Extension_8_11B8(9) : PL(A,12)= Extension_8_11B8(9)
Next
PL(0,6)=1
CONF(0)=MUON : CONF(1)=SOON : CONF(2)=0 : CONF(3)=2
CONF(4)=10 : CONF(5)=10 : CONF(6)=10 : CONF(7)=1 : CONF(8)=1
FC=CONF(0)*3 : CH=FC
HUM=1 : COM=9 : PRE=0
Pop Proc
PRESETS:
Data "randomize","normal battle","rocket attack","superior coms","monochrom"
Data "total defense","total attack","no weapons"
DEVS:
Data "disabl","joy 1","joy 2","joy *3","joy *4","keys 1","keys 2","keys 3","compu."
WEAPONS:
Data "none","jumpspeed","imploder","tunnel","autopilot","boxes","circle","rockets"
Data "shield","teleport","speed up","eater","freeze"
PRICE:
Data 0,2,250,500,300,600,750,500,1000,250,2,500,250
FARBEN:
Data "white","red","green","blue","magenta","cyan","amber","yellow","grey","l-green","pink"
EXTKEYS:
Data "joy 1 left","joy 1 right","joy 1 up","joy 1 down","joy 1 fire","pad 1 blue","pad 1 yellow","pad 1 green"
Data "joy 2 left","joy 2 right","joy 2 up","joy 2 down","joy 2 fire","pad 2 blue","pad 2 yellow","pad 2 green"
Data "joy 3 left","joy 3 right","joy 3 up","joy 3 down","joy 3 fire","","",""
Data "joy 4 left","joy 4 right","joy 4 up","joy 4 down","joy 4 fire","","",""
Data "pad 1 forward","pad 1 backward","pad 1 play","pad 2 forward","pad 2 backward","pad 2 play"
KEYS:
Data $80,$81,$82,$83,$84,$64,$66
Data $88,$89,$8A,$8B,$8C,$65,$67
Data $90,$91,$92,$93,$94,$63,$42
Data $98,$99,$9A,$9B,$9C,$5D,$4A
Data $4F,$4E,$4C,$4D,$46,$5F,$41
Data $2D,$2F,$3E,$1E,$2E,$43,$F
Data $31,$32,$10,$20,$40,$42,$63
End Proc
Procedure RAWRESET
For A=0 To MXPL-1
PL(A,8)=0 : PL(A,7)=0 : PL(A,13)=0 : PL(A,9)=0 : PL(A,14)=0 : PL(A,15)=0
Next
End Proc
Procedure PLAZERRESET
For A=0 To MXEX-1
EX(A,2)=0
Next
For A=0 To MXRO-1
RO(A,4)=0
Next
CO=0
For A=0 To MXPL-1
If PL(A,6)>0 Then Inc CO
Next
P=0
For A=0 To MXPL-1
If PL(A,6)>0
PL(A,0)=160+ Extension_8_1114((P*1024)/CO,80)
PL(A,1)=112+ Extension_8_1106((P*1024)/CO,80)
If Abs(PL(A,0)-160)>Abs(PL(A,1)-112)
PL(A,2)=Sgn(160-PL(A,0)) : PL(A,3)=0
Else
PL(A,3)=Sgn(112-PL(A,1)) : PL(A,2)=0
End If
PL(A,5)=1
Inc P
Else
PL(A,5)=0
End If
PL(A,9)=0 : PL(A,13)=0 : PL(A,15)=0
Next
End Proc[CO]
Procedure MENU
Shared EXTKEYS$(),KEYS(),PRE$(),PRE,HUM,COM,LOAOPTS
A$=""
If LOAOPTS Then Gosub OPTSLOAD : LOAOPTS=0
ACPL=0
Dim ST$(1,3)
ST$(0,0)="off" : ST$(0,1)="on"
ST$(1,0)="low" : ST$(1,1)="med" : ST$(1,2)="high" : ST$(1,3)="ultra"
Set Rainbow 0,0,182,"","",""
Screen Open 1,320,64+Ntsc*28,16,0 : Screen Hide
Curs Off : Flash Off : Paper 0 : Pen 1
Screen Display 1,128,229-NTS+Ntsc*8,320,64+Ntsc*28
Ink 1,0 : Gr Writing 0
For A=0 To 15 : Colour A,0 : Next
Gosub UPDATLASTSCORE
Wait Vbl
Screen Show
Fade 1,0,$FFF,$F00,$F0,$44F,$F0F,$FF,$F80,$FF0,$888,$8F8,$F8F
Wait 8
Screen Open 0,640,188,8,0 : Screen Hide
Curs Off : Flash Off : Paper 0 : Pen 1 : Cls
Screen Display 0,128,40-NTS,320,188+Ntsc*8
Screen Offset 0,0,0
Ink 1,0 : Gr Writing 0
Palette 0,0,0,0,0,0,0,0
For A=0 To 199
C= Extension_8_11B8(2)
If C=0 Then C=7
X= Extension_8_11B8(319) : Y= Extension_8_11B8(179)
Extension_8_0388 X,Y,C
Next
T1["Welcome to Megatron by Chris Hodges",0,1]
T1["Start game",24,3]
T1["Player options menu",40,5]
T1["Redefine keys",56,5]
T1["Game options menu",72,5]
T1["Disk menu",88,5]
T1["Credits",104,5]
T1["Quit game",120,3]
Wait Vbl
Rainbow 0,0,40-NTS,182
Screen Show
MXBS=6
Fade 2,0,$FFF,$444,$FF0,$440,$F0F,$404,$888
Gosub FADINRAIN
TM=15 : SM=20 : CH=FC
Do
Gosub CHECKS
If MK=0 and RX=0 Then SM=0
If(TM=0) and MK
TM=10
If NCP=0 or NCP=6 : Exit : End If
If NCP=1 : Gosub PLAZERMENU : End If
If NCP=2 : Gosub REDEFINE : End If
If NCP=3 : Gosub GAMEMENU : End If
If NCP=4 : Gosub DISKMENU : End If
If NCP=5 : Gosub CREDITS : End If
End If
If MK Then RX=1
Loop
Fade 2 : Timer=0
Gosub FADOUTRAIN
While Timer<32 : Multi Wait : Wend
Screen Close 0 : Rainbow Del : View
Screen 1 : Fade 1 : Wait 16
Screen Close 1
Pop Proc[NCP=0]
UPDATLASTSCORE:
Cls
If Ntsc=0
T["Last game's score table",-1,0,1]
Pen 1 : Locate 0,2 : Print "device score money device score money"
Y=3 : X=0
For A=0 To MXPL-1
If PL(A,6)
Pen PL(A,4)
Locate X,Y
Print DEV$(PL(A,6));" "; Extension_8_0EB8(PL(A,7),5);" "; Extension_8_0EB8(PL(A,8),5);
Inc Y : If Y>7 : Y=3 : Add X,20 : End If
End If
Next
Else
Extension_8_1204 30
T["Last game's score table",-1,0,1]
Ink 1,0
Text 0,12+Text Base,"device score money device score money device score money device score money"
Y=18 : X=0
For A=0 To MXPL-1
If PL(A,6)
Ink PL(A,4),0
Text X,Y+Text Base,DEV$(PL(A,6))+" "+ Extension_8_0EB8(PL(A,7),5)+" "+ Extension_8_0EB8(PL(A,8),5)
Add Y,6 : If Y>35 : Y=18 : Add X,80 : End If
End If
Next
Extension_8_05B0 "topaz",8
End If
Return
CHECKS:
Gosub ACTUALCURS
Multi Wait : View : I$=Inkey$
SC=Scancode : KS=Key Shift
If KS
Trap SC= Extension_8_0506(KS)+$60
End If
RX=(I$=Cleft$)-(I$=Cright$)+Jleft(1)-Jright(1)
RY=(I$=Cup$)-(I$=Cdown$)+Jup(1)-Jdown(1)
MK=(I$=Chr$(13))+(I$=" ")+Fire(1)
If RY=0 and RX=0 and MK=0 Then TM=0
If TM=0 and RY Then Add NCP,RY,0 To MXBS : TM=15
If(MK or RX) and CONF(1) and(SM=0)
SM=15 : Extension_8_1450 Extension_8_04F8(CH),5 : Add CH,1,FC To 3
End If
SM=Max(SM-1,0)
TM=Max(TM-1,0)
Return
CHECK2:
Gosub ACTUALCURS
Multi Wait : View : I$=Inkey$
SC=Scancode : KS=Key Shift
If KS
Trap SC= Extension_8_0506(KS)+$60
End If
If Extension_8_15BE(1,0) Then SC=$84
If Extension_8_15BE(1,1) Then SC=$85
If Extension_8_15BE(0,0) Then SC=$8C
If Extension_8_15BE(0,1) Then SC=$8D
If LOWLEVEL
If Extension_8_15BE(1,2) : SC=$86 : End If
If Extension_8_15BE(1,3) : SC=$87 : End If
If Extension_8_15BE(1,4) : SC=$A0 : End If
If Extension_8_15BE(1,5) : SC=$A1 : End If
If Extension_8_15BE(1,6) : SC=$A2 : End If
If Extension_8_15BE(0,2) : SC=$8E : End If
If Extension_8_15BE(0,3) : SC=$8F : End If
If Extension_8_15BE(0,4) : SC=$A3 : End If
If Extension_8_15BE(0,5) : SC=$A4 : End If
If Extension_8_15BE(0,6) : SC=$A5 : End If
End If
If PLAY4DIS Then Return
If Extension_8_0922(0) Then SC=$94
If Extension_8_0922(1) Then SC=$9C
Return
FADINRAIN:
If CONF(1) : Extension_8_1450 Extension_8_04F8(CH),9 : Add CH,1,FC To 3 : End If
OCP=1 : FL=0 : NCP=0
For A=7 To 0 Step -1
For B=0 To MXBS
For AA=0 To 7
Rain(0,B*16+AA+20)=Max(AA-A,0)
Rain(0,B*16+34-AA)=Max(AA-A,0)
Next
Next
Multi Wait : View
Next
Return
FADOUTRAIN:
For A=0 To 7
Rain(0,OCP*16+A+20)=A
Rain(0,OCP*16+34-A)=A
Next
If CONF(1) : Extension_8_1450 Extension_8_04F8(CH),9 : Add CH,1,FC To 3 : End If
For A=0 To 7
For B=0 To 181
Rain(0,B)=Max(Rain(0,B)-1,0)
Next
Multi Wait : View
Next
Return
CREDITS:
Screen 1 : Fade 2 : Screen 0
MNCP=NCP : Gosub FADOUTRAIN
Ink 0 : Bar 320,0 To 639,187
For A=0 To 320 Step 8
Screen Offset 0,A,0
Wait Vbl
Next
A=Free
A$="; B: L R0=RA*16; L R1=480; L R2=RB; L R3=Z(15); "
A$=A$+"A: P; L X=R0/16; L Y=R1/16; L R0=R0+R2; L R1=R1+R3; L R3=R3+1; "
A$=A$+"I R1>3584 J C; J A; C: I R1>3658 J B; I R3<20 J A; L R3=0-R3/2-RD; "
A$=A$+"L R1=3584; L R2=RB; L RC=1; J A; "
For A=0 To 7
X=Free
Sprite A,0,0,65
Channel A To Sprite A
Amal A,String$("P",(A+1)*16)+A$
Next
Palette 0,0,0,0,0,0,0,0
Wait Vbl
Screen Display 0,128,40-NTS,320,188
Paste Bob 320,0,1
T3["V1.5",40]
T3["BY CHRIS HODGES",64]
T3["ANY GIFTS TO",96]
T3["CHRIS HODGES",120]
T3["KENNEDYSTR. 8",136]
T3["82178 PUCHHEIM",152]
T3["WEST GERMANY",168]
Fade 1,0,$FFF,$FFF,$FFF,$FFF,$FFF,$FFF,$FFF
Wait 16
Fade 1,0,$300,$600,$C00,$D30,$D70,$EB0,$FF0,,,,,,,,,,$FF0,$990,$550,,$FF,$99,$55,,$F0F,$909,$505,,$F0,$90,$50
Amal On
Repeat
Multi Wait
Amreg(0)=128+ Extension_8_11B8(320) : Amreg(1)= Extension_8_11B8(30)-15 : Amreg(3)= Extension_8_11B8(5)
If Amreg(2) Then Amreg(2)=0 : If CONF(1) Then Extension_8_1450 Extension_8_04F8(CH),4 : Add CH,1,FC To 3
Until Mouse Key or Fire(1) or(Inkey$<>"")
Amreg(0)=0
Fade 1,0,$FFF,$FFF,$FFF,$FFF,$FFF,$FFF,$FFF
Wait 16
Fade 1
Wait 16 : Amal Off : Sprite Off
Screen Display 0,128,40-NTS,320,188+Ntsc*8
Screen 1 : Fade 2,0,$FFF,$F00,$F0,$44F,$F0F,$FF,$F80,$FF0,$888,$8F8,$F8F
Screen 0
Ink 0 : Bar 320,0 To 639,187
Wait Vbl
Palette 0,$FFF,$444,$FF0,$440,$F0F,$404,$888
For A=320 To 0 Step -8
Screen Offset 0,A,0
Wait Vbl
Next
Gosub FADINRAIN : NCP=MNCP
Return
GAMEMENU:
MNCP=NCP : Gosub FADOUTRAIN
Ink 0 : Bar 320,0 To 639,187
For A=0 To 99
C= Extension_8_11B8(2)
If C=0 Then C=7
X= Extension_8_11B8(319) : Y= Extension_8_11B8(187)
Extension_8_0388 X+320,Y,C
Next
T2["Game options menu",0,1]
T2["Return to main menu",24,5]
T2["Music: "+ST$(0,CONF(0)),40,1]
T2["Sound: "+ST$(0,CONF(1)),56,1]
T2["Computer intelligence: "+ST$(1,CONF(3)),72,1]
T2["Game speed:"+Str$(CONF(4)),88,1]
T2["Autoplot: "+ST$(0,CONF(2)),104,1]
T2["Rounds per game:"+Str$(CONF(5)),120,1]
T2["Explosion radius:"+Str$(CONF(6)),136,1]
T2["Boundary: "+ST$(0,CONF(7)),152,1]
T2["Events: "+ST$(0,CONF(8)),168,1]
If CONF(1) Then Extension_8_1450 Extension_8_04F8(CH),6 : Add CH,1,FC To 3
For A=0 To 320 Step 8
Screen Offset 0,A,0
Wait Vbl
Next
MXBS=9
Gosub FADINRAIN
Do
Gosub CHECKS
If MK
Exit If NCP=0
End If
If TM=0 and RX
TM=10
If NCP=1 and MUON
CONF(0)=1-CONF(0)
If CONF(0)=0
Extension_8_10A8
FC=0
Else
Extension_8_108E 3
FC=3 : CH=3
End If
T2["Music: "+ST$(0,CONF(0)),40,1]
End If
If NCP=2 and SOON
CONF(1)=1-CONF(1)
T2["Sound: "+ST$(0,CONF(1)),56,1]
End If
If NCP=3
Add CONF(3),RX,0 To 3
T2["Computer intelligence: "+ST$(1,CONF(3)),72,1]
End If
If NCP=4
Add CONF(4),RX,1 To 20
T2["Game speed:"+Str$(CONF(4)),88,1]
End If
If NCP=5
CONF(2)=1-CONF(2)
T2["Autoplot: "+ST$(0,CONF(2)),104,1]
End If
If NCP=6
Add CONF(5),RX,1 To 20
T2["Rounds per game:"+Str$(CONF(5)),120,1]
End If
If NCP=7
Add CONF(6),RX,2 To 40
T2["Explosion radius:"+Str$(CONF(6)),136,1]
End If
If NCP=8
CONF(7)=1-CONF(7)
T2["Boundary: "+ST$(0,CONF(7)),152,1]
End If
If NCP=9
CONF(8)=1-CONF(8)
T2["Events: "+ST$(0,CONF(8)),168,1]
End If
End If
Loop
Gosub FADOUTRAIN
MXBS=6
If CONF(1) Then Extension_8_1450 Extension_8_04F8(CH),6 : Add CH,1,FC To 3
For A=320 To 0 Step -8
Screen Offset 0,A,0
Wait Vbl
Next
Gosub FADINRAIN : NCP=MNCP
Return
PLAZERMENU:
MNCP=NCP : Gosub FADOUTRAIN
Ink 0 : Bar 320,0 To 639,187
For A=0 To 99
C= Extension_8_11B8(2)
If C=0 Then C=7
X= Extension_8_11B8(319) : Y= Extension_8_11B8(187)
Extension_8_0388 X+320,Y,C
Next
T2["Player options menu",0,1]
T2["Return to main menu",24,5]
Gosub UPDATPLY
If CONF(1) Then Extension_8_1450 Extension_8_04F8(CH),6 : Add CH,1,FC To 3
For A=0 To 320 Step 8
Screen Offset 0,A,0
Wait Vbl
Next
MXBS=6
Gosub FADINRAIN
Do
Gosub CHECKS
If MK
If NCP=0
CO=0
For A=0 To MXPL-1
If PL(A,6)>0 : Inc CO : End If
Next
If CO<2
If CONF(1) and(SM=0) : SM=10 : Extension_8_1450 Extension_8_04F8(CH),1 : Add CH,1,FC To 3 : End If
Else
Exit
End If
End If
End If
If MK Then RX=1
If(TM=0) and RX
TM=10
If NCP=1 : Add ACPL,RX,0 To MXPL-1 : Gosub UPDATPLY : End If
If NCP=2
Add PL(ACPL,4),RX,2 To 11
T2["Player"+Str$(ACPL+1)+"s color: "+CO$(PL(ACPL,4)),56,1]
End If
If NCP=3
Add PL(ACPL,6),RX,0 To 8
T2["Player"+Str$(ACPL+1)+"s device: "+DEV$(PL(ACPL,6)),72,1]
End If
If NCP>3 and NCP<7
Add PL(ACPL,NCP+6),RX,0 To 12
A$="Player"+Str$(ACPL+1)+"s weapon"+Str$(NCP-3)+": "+WEAP$(PL(ACPL,NCP+6))
A$=A$+" ("+Mid$(Str$(WP(PL(ACPL,NCP+6))),2)+")"
T2[A$,24+NCP*16,1]
End If
End If
Loop
Gosub FADOUTRAIN
MXBS=6
If CONF(1) Then Extension_8_1450 Extension_8_04F8(CH),6 : Add CH,1,FC To 3
For A=320 To 0 Step -8
Screen Offset 0,A,0
Wait Vbl
Next
Gosub FADINRAIN : NCP=MNCP
Return
UPDATPLY:
T2["Player selected:"+Str$(ACPL+1),40,1]
T2["Player"+Str$(ACPL+1)+"s color: "+CO$(PL(ACPL,4)),56,1]
T2["Player"+Str$(ACPL+1)+"s device: "+DEV$(PL(ACPL,6)),72,1]
For A=4 To 6
A$="Player"+Str$(ACPL+1)+"s weapon"+Str$(A-3)+": "+WEAP$(PL(ACPL,A+6))
A$=A$+" ("+Mid$(Str$(WP(PL(ACPL,A+6))),2)+")"
T2[A$,24+A*16,1]
Next
Return
DISKMENU:
MNCP=NCP : Gosub FADOUTRAIN
Ink 0 : Bar 320,0 To 639,187
For A=0 To 99
C= Extension_8_11B8(2)
If C=0 Then C=7
X= Extension_8_11B8(319) : Y= Extension_8_11B8(187)
Extension_8_0388 X+320,Y,C
Next
T2["Disk menu",0,1]
T2["Return to main menu",24,5]
T2["Load old settings",40,3]
T2["Save new settings",56,3]
T2["Preset: "+PRE$(PRE),72,1]
T2["Humans:"+Str$(HUM),88,1]
T2["Computers:"+Str$(COM),104,1]
T2["Generate scenario!",120,3]
If CONF(1) Then Extension_8_1450 Extension_8_04F8(CH),6 : Add CH,1,FC To 3
For A=0 To 320 Step 8
Screen Offset 0,A,0
Wait Vbl
Next
MXBS=6
Gosub FADINRAIN
Do
Gosub CHECKS
If(TM=0) and MK
TM=10
Exit If NCP=0
If NCP=1 : Gosub OPTSLOAD : End If
If NCP=2 : Gosub OPTSSAVE : End If
If NCP=6 : Gosub GENERATE : End If
End If
If MK Then RX=1
If(TM=0) and RX
TM=10
If NCP=3
Add PRE,RX,0 To 7
T2["Preset: "+PRE$(PRE),72,1]
End If
If NCP=4
Add HUM,RX,0 To MXPL
COM=Min(COM,MXPL-HUM)
If HUM+COM<2 : COM=2-HUM : End If
T2["Humans:"+Str$(HUM),88,1]
T2["Computers:"+Str$(COM),104,1]
End If
If NCP=5
Add COM,RX,0 To MXPL
HUM=Min(HUM,MXPL-COM)
If HUM+COM<2 : COM=2-HUM : End If
T2["Humans:"+Str$(HUM),88,1]
T2["Computers:"+Str$(COM),104,1]
End If
End If
Loop
Gosub FADOUTRAIN
MXBS=6
If CONF(1) Then Extension_8_1450 Extension_8_04F8(CH),6 : Add CH,1,FC To 3
For A=320 To 0 Step -8
Screen Offset 0,A,0
Wait Vbl
Next
Gosub FADINRAIN : NCP=MNCP
Return
OPTSSAVE:
A=Free
A$=""
For A=0 To 8
A$=A$+Chr$(CONF(A))
Next
A$=A$+Chr$($FF)
For A=0 To 6
For K=0 To 6
A$=A$+Chr$(KEYS(A,K))
Next
A$=A$+Chr$($FF)
Next
For A=0 To MXPL-1
A$=A$+Chr$(PL(A,5))+Chr$(PL(A,6))+Chr$(PL(A,10))+Chr$(PL(A,11))+Chr$(PL(A,12))+Chr$(PL(A,4))
Next
Trap Open Out 1,"MegaTron.cfg"
Trap Print #1,A$;
Trap Close 1
A$="" : A=Free
If CONF(1) Then Extension_8_1450 Extension_8_04F8(CH),8 : Add CH,1,FC To 3
Return
OPTSLOAD:
If Exist("MegaTron.cfg")=0 Then Return
OLDMUON=CONF(0)
FC=0
Extension_8_0456 "MegaTron.cfg",15
ST=Start(15)
For A=0 To 8
CONF(A)=Peek(ST) : Inc ST
Next
Inc ST
For A=0 To 6
For K=0 To 6
KEYS(A,K)=Peek(ST) : Inc ST
Next
Inc ST
Next
For A=0 To MXPL-1
Exit If ST=>Start(15)+Length(15)
PL(A,5)=Peek(ST) : PL(A,6)=Peek(ST+1)
PL(A,10)=Peek(ST+2) : PL(A,11)=Peek(ST+3)
PL(A,12)=Peek(ST+4)
If Peek(ST+5)<>$FF Then PL(A,4)=Peek(ST+5)
Add ST,6
Next
Erase 15
If MUON=0 Then CONF(0)=0
If SOON=0 Then CONF(1)=0
If CONF(0)=0 Then Extension_8_10A8
If CONF(0)<>0 and OLDMUON=0 Then FC=3 : Extension_8_108E 3
CH=FC
If CONF(1) Then Extension_8_1450 Extension_8_04F8(CH),8 : Add CH,1,FC To 3
Return
GENERATE:
On PRE+1 Gosub G_RANDOM,G_NORMAL,G_ROCKET,G_SUPCOM,G_MONO,G_TDEF,G_TATT,G_NOW
If HUM+COM<10
For A=HUM+COM To MXPL-1
PL(A,6)=0
Next
End If
If CONF(1) Then Extension_8_1450 Extension_8_04F8(CH),8 : Add CH,1,FC To 3
Return
G_RANDOM:
If HUM
DEV=1
For A=0 To HUM-1
PL(A,6)=DEV
PL(A,4)=A+2 : PL(A,10)= Extension_8_11B8(12) : PL(A,11)= Extension_8_11B8(12) : PL(A,12)= Extension_8_11B8(12)
Add DEV,1,1 To 7
Next
End If
If COM
For A=HUM To HUM+COM-1
PL(A,6)=8
PL(A,4)=A+2 : PL(A,10)= Extension_8_11B8(12) : PL(A,11)= Extension_8_11B8(12) : PL(A,12)= Extension_8_11B8(12)
Next
End If
Return
G_NORMAL:
If HUM
DEV=1
For A=0 To HUM-1
PL(A,6)=DEV
PL(A,4)=A+2 : PL(A,10)=7 : PL(A,11)=9 : PL(A,12)=3
Add DEV,1,1 To 7
Next
End If
If COM
For A=HUM To HUM+COM-1
PL(A,6)=8
PL(A,4)=A+2 : PL(A,10)=7 : PL(A,11)=9 : PL(A,12)= Extension_8_11B8(8)+1
Next
End If
Return
G_ROCKET:
If HUM
DEV=1
For A=0 To HUM-1
PL(A,6)=DEV
PL(A,4)=A+2 : PL(A,10)=7 : PL(A,11)=9 : PL(A,12)=3
Add DEV,1,1 To 7
Next
End If
If COM
For A=HUM To HUM+COM-1
PL(A,6)=8
PL(A,4)=A+2 : PL(A,10)=7 : PL(A,11)=7 : PL(A,12)=7
Next
End If
Return
G_SUPCOM:
If HUM
DEV=1
For A=0 To HUM-1
PL(A,6)=DEV
PL(A,4)=A+2 : PL(A,10)=1 : PL(A,11)=2 : PL(A,12)=9
Add DEV,1,1 To 7
Next
End If
If COM
For A=HUM To HUM+COM-1
PL(A,6)=8
PL(A,4)=HUM+2 : PL(A,10)=7 : PL(A,11)=3 : PL(A,12)=6
Next
End If
Return
G_MONO:
If HUM
DEV=1
For A=0 To HUM-1
PL(A,6)=DEV
PL(A,4)=PL(0,4) : PL(A,10)=7 : PL(A,11)=9 : PL(A,12)=0
Add DEV,1,1 To 7
Next
End If
If COM
For A=HUM To HUM+COM-1
PL(A,6)=8
PL(A,4)=PL(0,4) : PL(A,10)=7 : PL(A,11)=7 : PL(A,12)=7
Next
End If
Return
G_TDEF:
If HUM
DEV=1
For A=0 To HUM-1
PL(A,6)=DEV
PL(A,4)=A+2 : PL(A,10)=2 : PL(A,11)=8 : PL(A,12)=9
Add DEV,1,1 To 7
Next
End If
If COM
For A=HUM To HUM+COM-1
PL(A,6)=8
PL(A,4)=A+2 : PL(A,10)=7 : PL(A,11)=3 : PL(A,12)=5
Next
End If
Return
G_TATT:
If HUM
DEV=1
For A=0 To HUM-1
PL(A,6)=DEV
PL(A,4)=A+2 : PL(A,10)=7 : PL(A,11)=3 : PL(A,12)=5
Add DEV,1,1 To 7
Next
End If
If COM
For A=HUM To HUM+COM-1
PL(A,6)=8
PL(A,4)=A+2 : PL(A,10)=2 : PL(A,11)=8 : PL(A,12)=9
Next
End If
Return
G_NOW:
If HUM
DEV=1
For A=0 To HUM-1
PL(A,6)=DEV
PL(A,4)=A+2 : PL(A,10)=0 : PL(A,11)=0 : PL(A,12)=0
Add DEV,1,1 To 7
Next
End If
If COM
For A=HUM To HUM+COM-1
PL(A,6)=8
PL(A,4)=A+2 : PL(A,10)=0 : PL(A,11)=0 : PL(A,12)=0
Next
End If
Return
REDEFINE:
MNCP=NCP : Gosub FADOUTRAIN
Ink 0 : Bar 320,0 To 639,187
For A=0 To 199
C= Extension_8_11B8(2)
If C=0 Then C=7
X= Extension_8_11B8(319) : Y= Extension_8_11B8(140)
Extension_8_0388 X+320,Y,C
Next
T2["Redefine keys menu",0,1]
T2["Return to main menu",24,5]
T2["Define joystick 1 special keys",40,1]
T2["Define joystick 2 special keys",56,1]
T2["Define joystick 3 special keys",72,1]
T2["Define joystick 4 special keys",88,1]
T2["Define keys set 1",104,1]
T2["Define keys set 2",120,1]
T2["Define keys set 3",136,1]
If CONF(1) Then Extension_8_1450 Extension_8_04F8(CH),6 : Add CH,1,FC To 3
For A=0 To 320 Step 8
Screen Offset 0,A,0
Wait Vbl
Next
MXBS=7
Gosub FADINRAIN
Do
Gosub CHECKS
If MK
If NCP=0 : Exit : End If
If NCP=1 : PRT=1 : DEV=0 : Gosub DEFINEJOY : End If
If NCP=2 : PRT=2 : DEV=1 : Gosub DEFINEJOY : End If
If NCP=3 : PRT=3 : DEV=2 : Gosub DEFINEJOY : End If
If NCP=4 : PRT=4 : DEV=3 : Gosub DEFINEJOY : End If
If NCP=5 : PRT=1 : DEV=4 : Gosub DEFINEKEYS : End If
If NCP=6 : PRT=2 : DEV=5 : Gosub DEFINEKEYS : End If
If NCP=7 : PRT=3 : DEV=6 : Gosub DEFINEKEYS : End If
End If
Loop
Gosub FADOUTRAIN
MXBS=6
If CONF(1) Then Extension_8_1450 Extension_8_04F8(CH),6 : Add CH,1,FC To 3
For A=320 To 0 Step -8
Screen Offset 0,A,0
Wait Vbl
Next
Gosub FADINRAIN : NCP=MNCP
Return
DEFINEJOY:
Ink 0 : Bar 320,156 To 639,187
For K=0 To 6 : Gosub SHOKEY : Next
For K=4 To 6
Repeat : Gosub CHECK2 : Until SC=0
Gosub DEFINE
Next
Return
DEFINEKEYS:
Ink 0 : Bar 320,156 To 639,187
For K=0 To 6 : Gosub SHOKEY : Next
For K=0 To 6
Repeat : Gosub CHECK2 : Until SC=0
Gosub DEFINE
Next
Return
SHOKEY:
Gosub GEDIR
T[A$,X,156+Y*8,1]
SC=KEYS(DEV,K)
If SC>$7F
A$=EXTKEYS$(SC-$80)
Else
A$= Extension_8_08B4(SC)
End If
T[A$,X+56,156+Y*8,5]
Return
GEDIR:
If K=0 Then A$="Left :" : X=320 : Y=0
If K=1 Then A$="Right:" : X=320 : Y=1
If K=2 Then A$="Up :" : X=320 : Y=2
If K=3 Then A$="Down :" : X=320 : Y=3
If K=4 Then A$="Weap1:" : X=480 : Y=0
If K=5 Then A$="Weap2:" : X=480 : Y=1
If K=6 Then A$="Weap3:" : X=480 : Y=2
Return
DEFINE:
Gosub GEDIR
T[A$,X,156+Y*8,3]
Repeat
Gosub CHECK2
Until SC>0
If SC=$45
SC=KEYS(DEV,K)
Else
KEYS(DEV,K)=SC
End If
T[A$,X,156+Y*8,1]
Ink 0 : Bar X+56,156+Y*8 To X+159,163+Y*8
If SC>$7F
A$=EXTKEYS$(SC-$80)
Else
A$= Extension_8_08B4(SC)
End If
T[A$,X+56,156+Y*8,3]
Repeat
Gosub CHECK2
Until SC=0
Return
ACTUALCURS:
If NCP<>OCP
If CONF(1) : Extension_8_1450 Extension_8_04F8(CH),4 : Add CH,1,FC To 3 : End If
For A=0 To 7
Rain(0,OCP*16+A+20)=A
Rain(0,OCP*16+34-A)=A
Next
FL=0 : OCP=NCP
End If
For A=0 To 7
B=Max(A-Abs(FL),0)+(Abs(FL*A)*4) and $FF0
Rain(0,NCP*16+A+20)=B
Rain(0,NCP*16+34-A)=B
Next
Add FL,1,-7 To 7
Return
End Proc
Procedure GAMEON
Screen Open 0,320,256+22*Ntsc,16,0 : Screen Hide
Curs Off : Flash Off : Paper 0 : Pen 1
Screen Display 0,128,40-NTS,320,256+22*Ntsc
Gr Writing 0
For A=0 To 15 : Colour A,0 : Next
Screen Show
Clip 0,1 To 320,215
Auto View Off
For ROUNDS=1 To CONF(5)
HUMAN=0
For A=0 To MXPL-1
If PL(A,6)>0 and PL(A,6)<8 Then Inc HUMAN
Next
View : Sprite Off
PLAZERRESET
NP=Param
Cls
If CONF(7)
Extension_8_1016 0,0 To 319,0,1
Extension_8_1016 0,215 To 319,215,1
Extension_8_1016 0,1 To 0,214,1
Extension_8_1016 319,1 To 319,214,1
End If
Colour 17,$FFF : Colour 18,$999 : Colour 19,$555
Fade 2,0,$FFF,$F00,$F0,$44F,$F0F,$FF,$F80,$FF0,$888,$8F8,$F8F
For A=0 To MXPL-1
If PL(A,5) Then Gosub DRAPLAYERS
Next
T["Round"+Str$(ROUNDS),-1,96,1]
If Ntsc Then Extension_8_1204 30
Gosub UPDAT
If Ntsc Then Extension_8_05B0 "topaz",8
AD=Screen Base+80
Screen Open 1,32,9,2,0 : Screen Hide
Curs Off : Cls
UPP=0 : Z=25
For A=5 To 0 Step -1
Screen 1 : Home : Print Mid$(Str$(A),2);
Screen 0 : View
For D=0 To 3
Break Off
OLPLN=Deek(AD) : Doke AD,1
Zoom 1,0,0,8,8 To 0,160-Z,133-Z,160+Z,133+Z
Wait 5
Extension_8_0346 Y Hard(133+Z)
Ink 0 : Bar 160-Z,133-Z To 160+Z,133+Z
Doke AD,OLPLN
Break On
Dec Z
Next
If SO Then Extension_8_1450 Extension_8_04F8(CH),4 : Add CH,1,FC To 3
Next
If SO Then Extension_8_1450 Extension_8_04F8(CH),8 : Add CH,1,FC To 3
T["Round"+Str$(ROUNDS),-1,96,0]
TIM=0 : CL=Cop Logic : View
EV=99
If Ntsc Then Extension_8_1204 30
While NP>1
Gosub UPDATMONEY
If CONF(8) Then Gosub EVNTS
If HUMAN
If CONF(4)<9
While Timer<9-CONF(4)
Multi Wait
Wend
Timer=0
Else
Inc TIM
If TIM=>CONF(4)-10
Multi Wait : TIM=0
End If
End If
End If
I$=Inkey$ : SC=Scancode : KS=Key Shift
If I$=Chr$(27) Then View : Fade 2 : Wait 32 : Exit 2
If I$="p" Then While Inkey$="" : Multi Wait : Wend
Gosub CONTROL
MOVEEXPLO
MOVEROCKET
MOVEROCKET
If Extension_8_11B8(100)=0 and CONF(2) Then Extension_8_0388 Extension_8_11B8(317)+1, Extension_8_11B8(223)+1, Extension_8_11B8(11)
If CONF(7) Then Extension_8_1016 0,1 To 0,214,1 : Extension_8_1016 319,1 To 319,214,1
For A=0 To MXPL-1
If PL(A,5)
Gosub MOVE
Gosub DRAPLAYERS
If PL(A,5) and $200
Gosub MOVE
Gosub DRAPLAYERS
End If
End If
Next
Wend
If Ntsc Then Extension_8_05B0 "topaz",8
For A=0 To MXPL-1
If PL(A,5) Then Add PL(A,7),2 : Add PL(A,8),1000
Next
Fade 2
Repeat
If CONF(4)<9 Then While Timer<9-CONF(4) : Multi Wait : Wend : Timer=0
Inc TIM : If TIM=>CONF(4)-10 Then Multi Wait : TIM=0
MOVEEXPLO
MOVEROCKET
MOVEROCKET
If CONF(7)
Extension_8_1016 0,0 To 319,0,1
Extension_8_1016 0,215 To 319,215,1
Extension_8_1016 0,1 To 0,214,1
Extension_8_1016 319,1 To 319,214,1
End If
Until Colour(1)=0
Next
If Ntsc Then Extension_8_05B0 "topaz",8
Clip
Sprite Off
Screen Close 0
Auto View On
Pop Proc
EVNTS:
If Extension_8_11B8(99)=0 and EVTIM>50 Then Gosub NEVENT
Inc EVTIM
If EV=0 Then Doke CL+202, Extension_8_11B8($FF)
If EV=1 Then A= Extension_8_11B8(1) : Doke CL+190+A*4,- Extension_8_11B8(9) : Doke CL+194-A*4,0
If EV=2
L=Logbase( Extension_8_11B8(3))
A=CL+142+ Extension_8_11B8(3)*8
Doke A, Extension_8_0946(L) : Doke A+4,L and $FFFF
End If
If EV>2 and EV<6
If BLHR<160 : Inc BLHR : End If
Ink 1
Bar BLHX- Extension_8_11B8(2)-1,BLHY- Extension_8_11B8(2)-1 To BLHX+ Extension_8_11B8(2),BLHY+ Extension_8_11B8(2)
X1=Max(BLHX-5- Extension_8_11B8(BLHR/16),1) : Y1=Max(BLHY-5- Extension_8_11B8(BLHR/16),1)
X2=Min(BLHX+5+ Extension_8_11B8(BLHR/16),319) : Y2=Min(BLHY+5+ Extension_8_11B8(BLHR/16),212)
Screen Copy 0,X1,Y1,X2,Y2 To 0,X1+ Extension_8_11B8(4)-2,Y1+ Extension_8_11B8(4)-2
End If
If EV>5 and EV<9
If BLHR<640 : Inc BLHR : End If
X1=Max(BLHX-BLHR/8,1) : Y1=Max(BLHY-BLHR/8,1)
X2=Min(BLHX+BLHR/8,319) : Y2=Min(BLHY+BLHR/8,213)
Screen Copy 0,X1,Y1,X2,Y2 To 0,X1+ Extension_8_11B8(2)-1,Y1+ Extension_8_11B8(2)-1
End If
If EV>8 and EV<14 Then Gosub ROCKETLAUNCHER : CL=Cop Logic : View
If EV>13 and EV<19 Then Gosub EATERLAUNCHER : CL=Cop Logic : View
Return
NEVENT:
EV= Extension_8_11B8(79)
Sprite Off
CL=Cop Logic : View
BLHX= Extension_8_11B8(299)+10 : BLHY= Extension_8_11B8(194)+10
BLHR=0 : EVTIM=0
Return
ROCKETLAUNCHER:
If BLHR>-1 and BLHR<20
Sprite 0,X Hard(BLHX),Y Hard(BLHY),62+BLHR/5
Inc BLHR
If BLHR=20
BLHD=0 : TIMOUT=0 : RKS=0
Repeat
BLEN= Extension_8_11B8(MXPL-1)
Until PL(BLEN,5)
End If
Else
If BLHR>0
If PL(BLEN,5)=0
Repeat
BLEN= Extension_8_11B8(MXPL-1)
Until PL(BLEN,5)
End If
EVTIM=0
DX=Sgn(PL(BLEN,0)-BLHX) : DY=Sgn(PL(BLEN,1)-BLHY)
If DY<0 and DX=0 : BLHT=0 : End If
If DY<0 and DX>0 : BLHT=8 : End If
If DY=0 and DX>0 : BLHT=16 : End If
If DY>0 and DX>0 : BLHT=24 : End If
If DY>0 and DX=0 : BLHT=32 : End If
If DY>0 and DX<0 : BLHT=40 : End If
If DY=0 and DX<0 : BLHT=48 : End If
If DY<0 and DX<0 : BLHT=56 : End If
Add BLHD,Sgn(BLHT-BLHD)
Add BLHD,Sgn(BLHT-BLHD)
Sprite 0,X Hard(BLHX),Y Hard(BLHY),67+BLHD/8
If TIMOUT=0
If Abs(BLHD-BLHT)<3
SETROCKET[BLHX,BLHY,1,BLEN]
TIMOUT=25 : Inc RKS
If RKS=5
BLHR=-1
End If
Repeat
BLEN= Extension_8_11B8(MXPL-1)
Until PL(BLEN,5)
End If
Else
Dec TIMOUT
End If
Else
Sprite 0,X Hard(BLHX),Y Hard(BLHY),66-Abs(BLHR/5)
Dec BLHR
If BLHR=-20 : Gosub NEVENT : End If
End If
End If
Return
EATERLAUNCHER:
If BLHR>-1 and BLHR<20
Sprite 0,X Hard(BLHX),Y Hard(BLHY),86+BLHR/5
Inc BLHR
If BLHR=20
BLHD=0 : TIMOUT=0 : RKS=0
End If
Else
If BLHR>0
EVTIM=0
Add BLHD,1,0 To 15
Sprite 0,X Hard(BLHX),Y Hard(BLHY),91+BLHD/4
If TIMOUT=0
SETEATER[BLHX,BLHY,1, Extension_8_11B8(1)*2-1, Extension_8_11B8(1)*2-1]
TIMOUT=25 : Inc RKS
If RKS=5
BLHR=-1
End If
Else
Dec TIMOUT
End If
Else
Sprite 0,X Hard(BLHX),Y Hard(BLHY),100-Abs(BLHR/5)
Dec BLHR
If BLHR=-20 : Gosub NEVENT : End If
End If
End If
Return
UPDAT:
If Ntsc=0
UY=27 : UX=0 : UPP=0
For D=0 To MXPL-1
If PL(D,6)
Pen PL(D,4)
Locate UX,UY : Print DEV$(PL(D,6));" "; Extension_8_0EB8(PL(D,7),5);" "; Extension_8_0EB8(PL(D,8),5);
Inc UY : If UY>31 : UY=27 : Add UX,20 : End If
End If
Next
Else
Gr Writing 1
Clip 0,216 To 320,234
UY=216 : UX=0 : UPP=0
For D=0 To MXPL-1
If PL(D,6)
Ink PL(D,4),0
Text UX,UY+Text Base,DEV$(PL(D,6))+" "+ Extension_8_0EB8(PL(D,7),5)+" "+ Extension_8_0EB8(PL(D,8),5)
Add UY,6 : If UY>233 : UY=216 : Add UX,80 : End If
End If
Next
Clip 0,1 To 320,215
Gr Writing 0
End If
Return
UPDATMONEY:
If Ntsc=0
If UPP=0 : UY=27 : UX=0 : End If
If PL(UPP,6)
Pen PL(UPP,4)
Locate UX+13,UY : Print Extension_8_0EB8(PL(UPP,8),5);
Inc UY : If UY>31 : UY=27 : Add UX,20 : End If
End If
Add UPP,1,0 To MXPL-1
Else
Gr Writing 1
Clip 0,216 To 320,234
If UPP=0 : UY=216 : UX=0 : End If
If PL(UPP,6)
Ink PL(UPP,4),0
Text UX+52,UY+Text Base, Extension_8_0EB8(PL(UPP,8),5)
Add UY,6 : If UY>233 : UY=216 : Add UX,80 : End If
End If
Add UPP,1,0 To MXPL-1
Clip 0,1 To 320,215
Gr Writing 0
End If
Return
CONTROL:
If SC=0 Then OSC=SC
If SC and(SC<>OSC) Then OSC=SC : ACTION[SC]
If KS=0 Then OKS=KS
If KS and(KS<>OKS) Then OKS=KS : Trap ACTION[ Extension_8_0506(KS)+$60]
JX=Abs(Jleft(1)+Jright(1)*2)
JY=Abs(Jup(1)+Jdown(1)*2)
If JX
ACTION[$7F+JX]
Else
If JY
ACTION[$81+JY]
End If
End If
JF1=0
If Fire(1) Then JF1=$84
If Extension_8_15BE(1,1) Then JF1=$85
If LOWLEVEL
If Extension_8_15BE(1,2) : JF1=$86 : End If
If Extension_8_15BE(1,3) : JF1=$87 : End If
If Extension_8_15BE(1,4) : JF1=$A0 : End If
If Extension_8_15BE(1,5) : JF1=$A1 : End If
If Extension_8_15BE(1,6) : JF1=$A2 : End If
End If
If JF1=0 Then OJF1=JF1
If JF1 and JF1<>OJF1 Then OJF1=JF1 : ACTION[JF1]
JX=Abs(Jleft(0)+Jright(0)*2)
JY=Abs(Jup(0)+Jdown(0)*2)
If JX
ACTION[$87+JX]
Else
If JY
ACTION[$89+JY]
End If
End If
JF0=0
If Fire(0) Then JF0=$8C
If Extension_8_15BE(0,1) Then JF0=$8D
If LOWLEVEL
If Extension_8_15BE(0,2) : JF0=$8E : End If
If Extension_8_15BE(0,3) : JF0=$8F : End If
If Extension_8_15BE(0,4) : JF0=$A3 : End If
If Extension_8_15BE(0,5) : JF0=$A4 : End If
If Extension_8_15BE(0,6) : JF0=$A5 : End If
End If
If JF0=0 Then OJF0=JF0
If JF0 and JF0<>OJF0 Then OJF0=JF0 : ACTION[JF0]
If PLAY4DIS Then Return
JX=Abs( Extension_8_08EC(0)+ Extension_8_08FA(0)*2)
JY=Abs( Extension_8_0908(0)+ Extension_8_0914(0)*2)
If JX
ACTION[$8F+JX]
Else
If JY
ACTION[$91+JY]
End If
End If
JF2= Extension_8_0922(0)
If JF2=0 Then OJF2=JF2
If JF2 and JF2<>OJF2 Then OJF2=JF2 : ACTION[$94]
JX=Abs( Extension_8_08EC(1)+ Extension_8_08FA(1)*2)
JY=Abs( Extension_8_0908(1)+ Extension_8_0914(1)*2)
If JX
ACTION[$97+JX]
Else
If JY
ACTION[$99+JY]
End If
End If
JF3= Extension_8_0922(1)
If JF3=0 Then OJF3=JF3
If JF3 and JF3<>OJF3 Then OJF3=JF3 : ACTION[$9C]
Return
DRAPLAYERS:
If PL(A,13)
Dec PL(A,13)
Ink 0 : Draw PL(A,0)+(PL(A,3)+PL(A,2))*5,PL(A,1)+(PL(A,2)+PL(A,3))*5 To PL(A,0)+(PL(A,2)-PL(A,3))*5,PL(A,1)+(PL(A,3)-PL(A,2))*5
End If
If PL(A,9) or PL(A,13)
Extension_8_0388 PL(A,0),PL(A,1),1
Else
Extension_8_0388 PL(A,0),PL(A,1),PL(A,4)
End If
Return
MOVE:
If(PL(A,6)=8 and Extension_8_11B8(100000)<PL(A,8)) and CONF(3)>1 Then ACTION[-A]
If PL(A,6)=8 and CONF(3)<3
XYZ= Extension_8_11B8(2)+2
P= Extension_8_039E((PL(A,0)+PL(A,2)*XYZ+320) mod 320,(PL(A,1)+PL(A,3)*XYZ+216) mod 216)
If P>0 : Gosub COMPI : End If
End If
P= Extension_8_039E((PL(A,0)+PL(A,2)+320) mod 320,(PL(A,1)+PL(A,3)+216) mod 216)
If CONF(7)
If PL(A,0)+PL(A,2)<1 or PL(A,0)+PL(A,2)>318 : P=1 : End If
If PL(A,1)+PL(A,3)<1 or PL(A,1)+PL(A,3)>214 : P=1 : End If
End If
If P>0 and PL(A,9)>0 Then Gosub COMPI
If PL(A,6)=8 and(( Extension_8_11B8(100)=0 and CONF(3)) or P) Then Gosub COMPI
If P
If PL(A,6)<>8 : Dec HUMAN : End If
PL(A,5)=0 : Dec NP
SETEXPLO[PL(A,0),PL(A,1),PL(A,4)]
If P=PL(A,4) : P=PL(A,14) : End If
For EN=0 To MXPL-1
If PL(EN,5) and(PL(EN,4)=P)
Inc PL(EN,7)
Add PL(EN,8),500
Gosub UPDAT
End If
Next
Else
PL(A,9)=Max(PL(A,9)-1,0)
If PL(A,15)=0
If CONF(7)
Add PL(A,0),PL(A,2)
Add PL(A,1),PL(A,3)
Else
PL(A,0)=(PL(A,0)+PL(A,2)+320) mod 320
PL(A,1)=(PL(A,1)+PL(A,3)+216) mod 216
End If
If(PL(A,5) and $100)=0 : Add PL(A,8),2 : End If
Else
Dec PL(A,15)
End If
End If
Return
COMPI:
If P and(P<>PL(A,4)) Then PL(A,14)=P
R= Extension_8_11B8(3)
For T=0 To 4
If R=0 Then RX=-1 : RY=0
If R=1 Then RX=1 : RY=0
If R=2 Then RY=-1 : RX=0
If R=3 Then RY=1 : RX=0
P= Extension_8_039E((PL(A,0)+RX+320) mod 320,(PL(A,1)+RY+216) mod 216)
If P and(P<>PL(A,4)) Then PL(A,14)=P
If P=0
PL(A,2)=RX : PL(A,3)=RY
If SO and(CONF(0)=0) : Extension_8_1450 Extension_8_04F8(CH),5 : Add CH,1,FC To 3 : End If
Return
End If
If T>2 Then ACTION[-A] : P= Extension_8_039E((PL(A,0)+RX+320) mod 320,(PL(A,1)+RY+216) mod 216)
Add R,1,0 To 3
Next
Return
End Proc
Procedure SETEXPLO[XX,YY,C]
For A=0 To MXEX-1
If EX(A,2)=0
EX(A,0)=XX : EX(A,1)=YY : EX(A,2)=C : EX(A,3)=1
If SO : Extension_8_1450 Extension_8_04F8(CH),1 : Add CH,1,FC To 3 : End If
Pop Proc[A]
End If
Next
End Proc[-1]
Procedure MOVEEXPLO
For A=0 To MXEX-1
If EX(A,2)
If EX(A,3)<CONF(6)+1
Ink EX(A,2) : Extension_8_05E6 EX(A,0),EX(A,1),EX(A,3)
Inc EX(A,3)
Else
If EX(A,3)=CONF(6)*2
Ink 0 : Extension_8_05E6 EX(A,0),EX(A,1),CONF(6)
EX(A,2)=0
Else
Ink 0 : Circle EX(A,0),EX(A,1),CONF(6)*2+1-EX(A,3)
Inc EX(A,3)
End If
End If
End If
Next
End Proc
Procedure SETROCKET[XX,YY,C,E]
For A=0 To MXRO-1
If RO(A,4)=0
RO(A,0)=XX : RO(A,1)=YY : RO(A,2)=C : RO(A,3)=E : RO(A,4)=150
RO(A,5)=-1 : RO(A,6)=1
If SO : Extension_8_1450 Extension_8_04F8(CH),6 : Add CH,1,FC To 3 : End If
Exit
End If
Next
End Proc
Procedure SETEATER[XX,YY,C,RX,RY]
For A=0 To MXRO-1
If RO(A,4)=0
RO(A,0)=XX : RO(A,1)=YY : RO(A,2)=C : RO(A,4)=500
RO(A,5)=-1 : RO(A,6)=2 : RO(A,7)=RX : RO(A,8)=RY : RO(A,3)=-1
If SO : Extension_8_1450 Extension_8_04F8(CH),6 : Add CH,1,FC To 3 : End If
Exit
End If
Next
End Proc
Procedure MOVEROCKET
For A=0 To MXRO-1
If RO(A,4)
EN=RO(A,3)
If RO(A,6)=1
RX=Sgn(PL(EN,0)-RO(A,0)) : RY=Sgn(PL(EN,1)-RO(A,1))
If RO(A,5)=>0 : Extension_8_0388 RO(A,0),RO(A,1),RO(A,5) : End If
P= Extension_8_039E(RO(A,0)+RX,RO(A,1)+RY)
Dec RO(A,4)
If PL(EN,5)=0 or RO(A,4)=0 or(P>0 and P<>RO(A,2))
SETEXPLO[RO(A,0),RO(A,1),RO(A,2)]
If Param=>0 : EX(Param,3)=CONF(6) : End If
RO(A,4)=0
Else
RO(A,5)=P
Add RO(A,0),RX
Add RO(A,1),RY
Extension_8_0388 RO(A,0),RO(A,1),1
End If
Else
X=RO(A,0) : Y=RO(A,1)
If RO(A,5)=>0 : Extension_8_0388 X,Y,RO(A,5) : End If
Dec RO(A,4)
If RO(A,4)=0
SETEXPLO[RO(A,0),RO(A,1),RO(A,2)]
Else
W=1
RX=RO(A,7) : RY=RO(A,8) : Gosub FPIX
DX= Extension_8_11B8(1)*2-1 : DY= Extension_8_11B8(1)*2-1
If W : RX=-DX : RY=0 : Gosub FPIX : End If
If W : RX=0 : RY=-DY : Gosub FPIX : End If
If W : RX=-DX : RY=0 : Gosub FPIX : End If
If W : RX=0 : RY=DY : Gosub FPIX : End If
If W : RX=DX : RY=0 : Gosub FPIX : End If
If W=-1
For AA=0 To 15
RO(A,7)= Extension_8_11B8(2)-1 : RO(A,8)= Extension_8_11B8(2)-1
Exit If Abs(RO(A,7))+Abs(RO(A,8)) and Extension_8_039E(X+RO(A,7),Y+RO(A,8))<>1
Next
If AA=16
RO(A,4)=0 : W=0
SETEXPLO[RO(A,0),RO(A,1),RO(A,2)*2]
End If
End If
If W
If RO(A,3)=-1
RO(A,0)=X+RO(A,7) : RO(A,1)=Y+RO(A,8)
RO(A,5)= Extension_8_039E(RO(A,0),RO(A,1))
Else
SETEXPLO[RO(A,0),RO(A,1),RO(A,2)]
If Param=>0 : EX(Param,3)=CONF(6) : End If
RO(A,4)=0
End If
End If
Extension_8_0388 RO(A,0),RO(A,1),1
End If
End If
End If
Next
Pop Proc
FPIX:
P= Extension_8_039E(X+RX,Y+RY)
If P=1
W=-1 : RO(A,5)=P : Return
End If
If RO(A,3)=-1
If P>0 and P<>RO(A,2)
RO(A,0)=X+RX : RO(A,1)=Y+RY
RO(A,5)=0 : W=0 : RO(A,3)=P
End If
Else
If P=RO(A,3)
RO(A,0)=X+RX : RO(A,1)=Y+RY
RO(A,5)=0 : W=0
End If
End If
Return
End Proc
Procedure ACTION[KEY]
Shared KEYS()
If KEY<=0 Then Gosub COMPACT Else Gosub HUMACT
Pop Proc
HUMACT:
For A=0 To MXPL-1
If PL(A,5)
D=PL(A,6)
If D>0 and D<8
For K=0 To 6
If KEYS(D-1,K)=KEY
On K+1 Gosub TLEFT,TRIGHT,TUP,TDOWN,WEAPON,WEAPON,WEAPON
Exit
End If
Next
End If
End If
Next
Return
COMPACT:
K=Rnd(2)+4 : A=-KEY
Gosub WEAPON
Return
TLEFT:
If PL(A,2)=0 Then PL(A,2)=-1 : PL(A,3)=0 : PL(A,5)=PL(A,5) and $FCFF : If SO Then Extension_8_1450 Extension_8_04F8(CH),5 : Add CH,1,FC To 3
Return
TRIGHT:
If PL(A,2)=0 Then PL(A,2)=1 : PL(A,3)=0 : PL(A,5)=PL(A,5) and $FCFF : If SO Then Extension_8_1450 Extension_8_04F8(CH),5 : Add CH,1,FC To 3
Return
TUP:
If PL(A,3)=0 Then PL(A,3)=-1 : PL(A,2)=0 : PL(A,5)=PL(A,5) and $FCFF : If SO Then Extension_8_1450 Extension_8_04F8(CH),5 : Add CH,1,FC To 3
Return
TDOWN:
If PL(A,3)=0 Then PL(A,3)=1 : PL(A,2)=0 : PL(A,5)=PL(A,5) and $FCFF : If SO Then Extension_8_1450 Extension_8_04F8(CH),5 : Add CH,1,FC To 3
Return
WEAPON:
WP=PL(A,K+6)
If PL(A,8)<WP(WP) Then Return
C=0
For T=0 To MXPL-1
If PL(T,5) Then Inc C
Next
If C<2 Then Return
Repeat
EN= Extension_8_11B8(MXPL-1)
Until PL(EN,5) and A<>EN
Add PL(A,8),-WP(WP)
On WP Gosub JUMPSPEED,IMPLODER,TUNNEL,AUTOPILOT,BOES,BIGBOX,ROCKETS,SHIELD,TELEPORT,SPEEDUP,EATER,FREZ
Return
EATER:
SETEATER[PL(A,0)+PL(A,2),PL(A,1)+PL(A,3),PL(A,4),PL(A,2),PL(A,3)]
Return
FREZ:
Add PL(A,15),250
Return
JUMPSPEED:
PL(A,2)=Sgn(PL(A,2))*2 : PL(A,3)=Sgn(PL(A,3))*2
PL(A,5)=PL(A,5) or $100
Return
SPEEDUP:
PL(A,5)=PL(A,5) or $300
Return
IMPLODER:
If SO Then Extension_8_1450 Extension_8_04F8(CH),10 : Add CH,1,FC To 3
Ink 0 : Extension_8_05E6 PL(A,0),PL(A,1),10
Return
TUNNEL:
If SO Then Extension_8_1450 Extension_8_04F8(CH),7 : Add CH,1,FC To 3
Ink PL(A,4)
Draw PL(EN,0)+PL(EN,3),PL(EN,1)+PL(EN,2) To PL(EN,0)+PL(EN,3)+PL(EN,2)*20,PL(EN,1)+PL(EN,2)+PL(EN,3)*20
Draw PL(EN,0)-PL(EN,3),PL(EN,1)-PL(EN,2) To PL(EN,0)-PL(EN,3)+PL(EN,2)*20,PL(EN,1)-PL(EN,2)+PL(EN,3)*20
Return
AUTOPILOT:
If SO Then Extension_8_1450 Extension_8_04F8(CH),3 : Add CH,1,FC To 3
Add PL(A,9),250
Return
BOES:
If SO Then Extension_8_1450 Extension_8_04F8(CH),2 : Add CH,1,FC To 3
Ink PL(A,4)
Box PL(EN,0)-7,PL(EN,1)-7 To PL(EN,0)-2,PL(EN,1)-2
Box PL(EN,0)+7,PL(EN,1)-7 To PL(EN,0)+2,PL(EN,1)-2
Box PL(EN,0)-7,PL(EN,1)+7 To PL(EN,0)-2,PL(EN,1)+2
Box PL(EN,0)+7,PL(EN,1)+7 To PL(EN,0)+2,PL(EN,1)+2
Return
BIGBOX:
If SO Then Extension_8_1450 Extension_8_04F8(CH),2 : Add CH,1,FC To 3
Ink PL(A,4)
Circle PL(EN,0),PL(EN,1),48
Return
ROCKETS:
SETROCKET[PL(A,0),PL(A,1),PL(A,4),EN]
Return
SHIELD:
Add PL(A,13),250
Return
TELEPORT:
If SO Then Extension_8_1450 Extension_8_04F8(CH),9 : Add CH,1,FC To 3
PL(A,0)= Extension_8_11B8(317)+1 : PL(A,1)= Extension_8_11B8(213)+1
Ink PL(A,4) : Extension_8_05E6 PL(A,0)-PL(A,2)*3,PL(A,1)-PL(A,3)*3,3
Ink 0 : Extension_8_05E6 PL(A,0)+PL(A,2)*11,PL(A,1)+PL(A,3)*11,10
Return
End Proc
Procedure T[T$,XX,Y,C]
If XX<0 Then XX=160-Text Length(T$)/2
YY=Y+Text Base
Ink C : Text XX,YY,T$
End Proc
Procedure T1[T$,Y,C]
XX=160-Len(T$)*4 : YY=Y+Text Base
Ink 0 : Bar XX-8,Y To XX+Len(T$)*8+8,Y+9
Ink C+1 : Text XX+1,YY+1,T$
Ink C : Text XX,YY,T$
End Proc
Procedure T2[T$,Y,C]
XX=480-Len(T$)*4 : YY=Y+Text Base
Ink 0 : Bar XX-32,Y To XX+Len(T$)*8+32,Y+9
Ink C+1 : Text XX+1,YY+1,T$
Ink C : Text XX,YY,T$
End Proc
Procedure T3[T$,Y]
X=480-Len(T$)*8
For A=1 To Len(T$)
C=Asc(Mid$(T$,A,1))-29
Paste Bob X,Y,C
Add X,16
Next
End Proc